\begin{lstlisting}[frame=shadowbox, language=C, breaklines=true, basicstyle=\footnotesize]
#Param: fd, puntero al string, cantidad de bytes para imprimir
#Retorna la cantidad de bytes escritos en v0

#define STDERR           2

#define TAM_FRAME       32

#define SS_NUM_BYTES    40
#define SS_BUFFER       36
#define SS_FD           32

#define POS_SRA_RA      28
#define POS_SRA_FP      24
#define POS_SRA_GP      16

#include <mips/regdef.h>
#include <sys/syscall.h>

.data
msj_error : .asciiz ``Error de Escritura\n''

.text
.align 2
.globl write
.ent write

write:
   .frame        $fp, TAM_FRAME, ra
   .set noreorder
   .cpload       t9
   .set reorder
   subu          sp, sp, TAM_FRAME
   .cprestore POS_SRA_GP
   sw            ra, POS_SRA_RA(sp)
   sw            $fp, POS_SRA_FP(sp)
   move          $fp, sp

#guardo los parametros recibidos
   sw            a0, SS_FD(sp)
   sw            a1, SS_BUFFER(sp)
   sw            a2, SS_FD(sp)

   li            v0, SYS_write
   syscall
   bne           a3, zero, write_error #si hay error

eof:
   move          sp, $fp
   lw            ra, POS_SRA_RA(sp)
   lw            $fp, POS_SRA_FP(sp)
   addu          sp, sp, TAM_FRAME
   j             ra 

#si hay un error termina la ejecucion del programa
write_error:
   li            v0, SYS_write
   la            a0, STDERR #cargo el stderr
   la            a1, msj_error
   li            a2, 20
   syscall #imprimo un msj de error


   li            v0, SYS_exit 
   li            a0, 1
   syscall #termino la ejecucion del programa

.end write
\end{lstlisting}
